#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2014-08-22 01:14:23
# @Author  : shitao.tommy (hero007asd@gmail.com)
# @Link    : http://example.org
# @Version : $Id$


from web.handler.api import BaseApiHandler
from lib.tornado_routes import route
from tornado import gen
from tornado.web import asynchronous
from lib import libimage
from web.models.api.qrcode.qr import Qr

head_title = '二维码'

@route(r'api/qr/code/bind/?',name='code_bind')
class BandCodeHandler(BaseApiHandler):
    '''
    @title 批量绑定二维码
    @method post
    @param token 商户token
    @param outId 出库id
    @param num 绑定二维码数量
    @retfield isOk 绑定成功与否1成功0失败 
    @return {status:200, message:'', data:null}---status:500(系统错误)400(请传入商户token)
    @description 绑定二维码
    '''
    @asynchronous
    @gen.coroutine
    def post(self):
        out_id = self.get_argument('outId',default=0)
        qr_num = self.get_argument('num', default=0)
        token = self.get_argument('token', default='')

        if token == '':
            self.write_fail(None, 400, '请传入商户token')
        else:
            ret = yield Qr().bind_batch(token, out_id, qr_num)
            if ret == '-1':
                self.write_fail(None, 500, '系统错误')
            elif ret == '0':
                self.write_success({'isOk':0})
            elif ret == '1':
                self.write_success({'isOk':1})

        self.finish()


@route(r'api/qr/code/bindToken/?',name='token_bind')
class BindTokenHandler(BaseApiHandler):
    '''
    @title 绑定商户token
    @method post
    @param token 商户token
    @param num 绑定二维码数量
    @retfield isOk 绑定成功与否1成功0失败 
    @return {status:200, message:'', data:null}---status:500(系统错误)400(请传入商户token)
    @description 绑定商户token
    '''
    @asynchronous
    @gen.coroutine
    def post(self):
        qr_num = self.get_argument('num', default=0)
        token = self.get_argument('token', default='')

        if token == '':
            self.write_fail(None, 400, '请传入商户token')
        else:
            if ret == '-1':
                self.write_fail(None, 500, '系统错误')
            else:
                ret = yield Qr().bind_token(token , qr_num)
                if ret == '0':
                    self.write_success({'isOk':0})
                elif ret == '1':
                    self.write_success({'isOk':1})

        self.finish()

@route(r'api/qr/code/new/?',name='code_new')
class NewCodeHandler(BaseApiHandler):
    '''
    @title 生成二维码
    @method post
    @param num 绑定二维码数量
    @retfield isOk 发布成功与否1成功0失败 
    @return {status:200, message:'', data:null}---status:500(系统错误)
    @description 生成二维码
    '''
    @asynchronous
    @gen.coroutine
    def post(self):
        qr_num = self.get_argument('num', default=1)

        ret = yield Qr().new_batch(qr_num)
        if ret == '-1':
            self.write_fail(None, 500, '系统错误')
        elif ret == '0':
            self.write_success({'isOk':0})
        elif ret == '1':
            self.write_success({'isOk':1})
        self.finish()


@route(r'api/qr/code/num/?',name='code_num')
class NumCodeHandler(BaseApiHandler):
    '''
    @title 二维码数量信息
    @method get
    @param token 商户token
    @retfield bandNum 已绑定二维码数量 
    @retfield restNum 剩余二维码数量 
    @return {status:200, message:'', data:null}---status:500(系统错误)400(请传入商户token)
    @description 二维码数量信息
    '''
    @asynchronous
    @gen.coroutine
    def get(self):
        token = self.get_argument('token', default='')
        if token == '':
            self.write_fail(None, 400, '请传入商户token')
        else:
            ret = yield Qr().num_batch(token)
            if ret == '-1':
                self.write_fail(None, 500, '系统错误')
            else:
                self.write_success(ret)
        self.finish()

@route(r'api/qr/code/list/?',name='code_list')
class CodeListHandler(BaseApiHandler):
    '''
    @title 已绑定二维码列表
    @method get
    @param token 商户token（必须）
    @param outId 出库id（必须）
    @param page 第几页 默认：1
    @param offset 每页显示多少数据 默认：20
    @retfield id 
    @retfield fristQrcode 第一层二维码
    @retfield secondQrcode 第二层二维码
    @retfield isBan 是否被冻结0否1是
    @retfield createTime 二维码创建时间
    @retfield scan1Count 第一层扫描次数
    @retfield scan1Time 第一层扫描时间
    @retfield scan2Count 第二层扫描次数
    @retfield scan2Time 第二层扫描时间
    @retfield bindtime 绑定时间
    @retfield token 商户token
    @retfield isLock 是否被锁定0否1是
    @return {status:200, message:'', data:null}---status:500(系统错误)400(缺少必要参数)
    @description 已绑定二维码列表
    '''
    @asynchronous
    @gen.coroutine
    def get(self):
        token = self.get_argument('token', default='')
        out_id = self.get_argument('outId', default='')
        page = self.get_argument('page', default=1)
        offset = self.get_argument('offset', default=20)

        if token == '' or out_id == '':
            self.write_fail(None, 400, '缺少必要参数')
        else:
            ret = yield Qr().list_bond(token, out_id, int(page), int(offset))
            if ret == '-1':
                self.write_fail(None, 500, '系统错误')
            else:
                self.write_success(ret)
        self.finish()

@route(r'api/qr/code/dtl/?',name='code_dtl')
class CodeDetlHandler(BaseApiHandler):
    '''
    @title 二维码基本信息
    @method get
    @param qrcode 二维码第一层码号（必须）
    @param ip 查询ip地址
    @retfield outId 出库id
    @retfield fristQrcode 第一层二维码编号
    @retfield brand 品牌
    @retfield partNo 料号
    @retfield num 数量
    @retfield weight 重量
    @retfield dataCode 
    @retfield shipTime 出货时间
    @return {status:200, message:'', data:null}---status:500(系统错误)400(缺少必要参数)
    @description 二维码基本信息
    '''
    @asynchronous
    @gen.coroutine
    def get(self):
        qr_code = self.get_argument('qrcode', default='')
        ip = self.get_argument('ip', default='')

        if ip == '' or qr_code == '':
            self.write_fail(None, 400, '缺少必要参数')
        else:
            ret = yield Qr().qrcode_dtl(qr_code, ip)
            if ret == '-1':
                self.write_fail(None, 500, '系统错误')
            else:
                self.write_success(ret)
        self.finish()


@route(r'api/qr/code/sdtl/?',name='code_sdtl')
class CodeSdtlHandler(BaseApiHandler):
    '''
    @title 二维码私密信息
    @method get
    @param user 用户名（必须）
    @param pwd 密码（必须）
    @param qrcode 二维码第一层码号（必须）
    @retfield client  客户
    @retfield clientPn 客户料号
    @retfield orderNo 订单号
    @return {status:200, message:'', data:null}---status:500(系统错误)400(缺少必要参数)
    @description 二维码私密信息
    '''
    @asynchronous
    @gen.coroutine
    def get(self):
        user = self.get_argument('user', default='')
        pwd = self.get_argument('pwd', default='')
        qrcode = self.get_argument('qrcode', default='')

        if user == '' or pwd == '' or qrcode == '':
            self.write_fail(None, 400, '缺少必要参数')
        else:
            ret = yield Qr().qrcode_secret_dtl(qrcode,user, pwd)
            if ret == '-1':
                self.write_fail(None, 500, '系统错误')
            else:
                self.write_success(ret)
        self.finish()

@route(r'api/qr/query/log/?',name='query_log')
class QueryLogHandler(BaseApiHandler):
    '''
    @title 查询日志
    @method get
    @param token 商户token（必须）
    @param qrcode 二维码编号 
    @param city 查询地址 
    @param deliver_address 收货地 
    @param page 第几页 默认：1
    @param offset 每页显示多少数据 默认：20
    @retfield qrcode 二维码
    @retfield ipaddress ip地址
    @retfield city 查询城市
    @retfield clientName 客户名
    @retfield outAddress 收货地
    @retfield createTime 查询时间
    @return {status:200, message:'', data:null}---status:500(系统错误)400(缺少必要参数)
    @description 查询日志
    '''
    @asynchronous
    @gen.coroutine
    def get(self):
        token = self.get_argument('token', default='')
        page = self.get_argument('page', default=1)
        offset = self.get_argument('offset', default=20)
        qrcode = self.get_argument('qrcode', default='')
        deliver_address = self.get_argument('deliver_address', default='')
        city = self.get_argument('city', default='')

        if token == '':
            self.write_fail(None, 400, '缺少必要参数')
        else:
            ret = yield Qr().query_log(token,int(page), int(offset), qrcode, city, deliver_address)
            if ret == '-1':
                self.write_fail(None, 500, '系统错误')
            else:
                self.write_success(ret)
        self.finish()

@route(r'api/qr/query/loginfo/?',name='query_loginfo')
class QueryLogInfoHandler(BaseApiHandler):
    '''
    @title 查询日志详细信息
    @method get
    @param token 商户token（必须）
    @param qrcode 二维码编号 
    @retfield token 商户token
    @retfield brand 品牌名
    @retfield partNo 料号
    @retfield num 数量
    @retfield weight 重量
    @retfield dataCode 
    @retfield shipTime 出货时间 格式：xxxx-xx-xxTxx:xx:xx
    @retfield deliverAddress 收货地址
    @retfield client 客户名
    @retfield clientPn 客户料号
    @retfield orderNo 订单号
    @retfield user 用户名
    @retfield pwd 密码
    @retfield isOk 发布成功与否1成功0失败 
    @return {status:200, message:'', data:null}---status:500(系统错误)400(缺少必要参数)
    @description 查询日志详细信息
    '''
    @asynchronous
    @gen.coroutine
    def get(self):
        token = self.get_argument('token', default='')
        qrcode = self.get_argument('qrcode', default='')

        print 'start'

        if token == '' or qrcode == '':
            self.write_fail(None, 400, '缺少必要参数')
        else:
            ret = yield Qr().query_loginfo(token, qrcode)
            if ret == '-1':
                self.write_fail(None, 500, '系统错误')
            else:
                self.write_success(ret)
        self.finish()